import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import os

# 创建图片保存目录
os.makedirs('output', exist_ok=True)

# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

# 读取数据
data = pd.read_excel('FhjlViewDD.xlsx')
data['创建时间'] = pd.to_datetime(data['创建时间'])

# 任务a: 矿粉货运量日趋势
june_mineral = data[(data['创建时间'].dt.month == 6) & (data['货品'] == '矿粉')]
daily_mineral = june_mineral.groupby(june_mineral['创建时间'].dt.date)['净重'].sum()
plt.figure(figsize=(12, 6))
plt.bar(daily_mineral.index.astype(str), daily_mineral.values, color='steelblue')
plt.title('6月份每日矿粉货运量趋势')
plt.xlabel('日期')
plt.ylabel('货运量(吨)')
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.savefig('output/daily_mineral_transport.png', dpi=300)
plt.close()

# 任务b: 水泥货运量日趋势
# 创建6月完整日期范围
june_dates = pd.date_range('2025-06-01', '2025-06-30')

# 获取水泥货运数据
june_cement = data[(data['创建时间'].dt.month == 6) & (data['货品'] == '水泥')]
daily_cement = june_cement.groupby(june_cement['创建时间'].dt.date)['净重'].sum()

# 创建完整6月日期序列，无货运量的日期设为0
full_dates = pd.Series(index=june_dates.date, data=0)
full_dates.update(daily_cement)

# 绘制图表
plt.figure(figsize=(12, 6))
plt.bar(full_dates.index.astype(str), full_dates.values, color='orange')
plt.title('6月份每日水泥货运量趋势')
plt.xlabel('日期')
plt.ylabel('货运量(吨)')
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.savefig('output/daily_cement_transport.png', dpi=300)
plt.close()

# 任务c: 客户货运需求量
customer_demand = data[data['创建时间'].dt.month == 6].groupby('客户')['净重'].sum().sort_values(ascending=False)
customer_demand.to_csv('output/customer_demand_ranking.csv', encoding='utf-8-sig')

# 任务d: 发货地发货总量
location_total = data[data['创建时间'].dt.month == 6].groupby('发货地')['净重'].sum().reset_index()
plt.figure(figsize=(12, 6))
plt.pie(location_total['净重'], 
        labels=location_total['发货地'], 
        autopct='%1.1f%%',
        pctdistance=0.85,
        textprops={'fontsize': 10})

# 添加图例解决标签重叠问题
plt.legend(loc='upper right', bbox_to_anchor=(0.1,1))
plt.title('6月份各发货地发货总量占比')
plt.savefig('output/location_distribution.png', dpi=300)
plt.close()

# 任务e: 车牌号货运量
vehicle_total = data[data['创建时间'].dt.month == 6].groupby('车辆')['净重'].sum().sort_values(ascending=False)
vehicle_total.to_csv('output/vehicle_ranking.csv', encoding='utf-8-sig')

print('所有分析已完成，结果保存在output目录下')